package dev.ece.suit.hexmap.terrain;

import java.util.List;

import com.bulletphysics.collision.shapes.CollisionShape;

import dev.ece.core.light.Material;
import dev.ece.core.texture.Texture;
import dev.ece.suit.hexmap.HexMapCell;
import dev.ece.suit.hexmap.HexMapChunks;
import dev.ece.suit.hexmap.HexMapCrevice;
import dev.ece.suit.hexmap.HexMapTriangle;
import dev.ece.suit.hexmap.HexMapWaterCell;

/**
 * 地形工厂
 * @author 潜行的虚影
 *
 */
@Deprecated
public interface TerrainFactory {

	/**
	 * 创建地形主体
	 * @param chunks 分块管理
	 * @param types 地形类型
	 * @return
	 */
	public HexMapCell[][] createHexMapCells(HexMapChunks chunks, int[][] types);
	
	/**
	 * 创建裂缝
	 * @param chunks 分块管理
	 * @param cells 地形主体
	 * @return
	 */
	public List<HexMapCrevice> createHexMapCrevices(HexMapChunks chunks, HexMapCell[][] cells);
	
	/**
	 * 创建三角形缝隙
	 * @param chunks 分块管理
	 * @param cells 地形主体
	 * @return
	 */
	public List<HexMapTriangle> createHexMapTriangles(HexMapChunks chunks, HexMapCell[][] cells);
	
	/**
	 * 创建水体
	 * @return
	 */
	public List<HexMapWaterCell> createHexMapWaterCells(HexMapChunks chunks, HexMapCell[][] cells);
	
	/**
	 * 创建水材质
	 * @return
	 */
	public Material createWaterMaterial();
	
	/**
	 * 创建地表纹理贴图
	 * @return
	 */
	public Texture[] createTextures();
	
	public Texture createWaterNoiseTexture();
	
	/**
	 * 地图主体外径
	 * @return
	 */
	public float getCellOutSize();
	
	/**
	 * 创建物理引擎形状
	 * @param cells
	 * @param crevices
	 * @param triangles
	 * @param waters
	 * @return
	 */
	public CollisionShape createCollisionShape(
			int rows, int cols,
			HexMapCell[][] cells, 
			List<HexMapCrevice> crevices, 
			List<HexMapTriangle> triangles, 
			List<HexMapWaterCell> waters);
	
}
